package com.softeem.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * map集合的定义以及使用
 */
public class HashMapDemo {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        //将元素添加到集合中
        map.put(6,"张三");//给集合进行元素的赋值
        map.put("2","李四");//值相同不影响元素的内容
        map.put('3',"李四");
        map.put("四",20);
        map.put("5",true);
        map.put(6,"赵四");//当键相同的时候,就将原来的值给覆盖了
        System.out.println(map);

        //键是int类型,值是String类型
        HashMap<Integer,String> map1 = new HashMap<Integer,String>();
        map1.put(1,"玛卡巴卡");
        map1.put(2,"唔西迪西");
        map1.put(3,"叮叮车");
        map1.put(4,"小点点");
        map1.put(3,"依古比古");
        System.out.println(map1);//{1=玛卡巴卡, 2=唔西迪西, 3=依古比古, 4=小点点}

        //V get(Object key)
        //  返回到指定键所映射的值，或 null如果此映射包含该键的映射。
        String v1 = map1.get(3);
        System.out.println(v1);//依古比古
        String v2 = map1.get(5);
        System.out.println(v2);//null
        String v3 = map1.getOrDefault(10,"此元素不存在");
        System.out.println(v3);//此元素不存在

        //获取集合中的元素
        int size = map1.size();
        System.out.println(size);

        //删除元素
        map1.remove(4);
        System.out.println(map1);

        //boolean containsKey(Object key)
        //  如果此映射包含指定键的映射，则返回 true 。
        //boolean containsValue(Object value)
        //  如果此地图将一个或多个键映射到指定值，则返回 true 。
        //根据键来进行查找
        boolean f1 = map1.containsKey(3);
        System.out.println(f1);
        //根据值来进行查找
        boolean f2 = map1.containsValue("唔西迪西");
        System.out.println(f2);

        //Set<Map.Entry<K,V>> entrySet()
        //返回此地图中包含的映射的Set视图。

        //第一种对于map集合的遍历方式
        Set<Map.Entry<Integer, String>> set = map1.entrySet();
        for(Map.Entry<Integer,String> entry : set){
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }

        //第二种对于map集合的遍历方式
        //首先获取到key,然后根据key来获取到value
        //Set<K> keySet()
        //  返回此地图中包含的键的Set视图。
        //  将map集合的key值放在set集合里面
        Set<Integer> set1 = map1.keySet();
        System.out.println(set1);
        for(Integer key : set1){
            String v = map1.get(key);
            System.out.println(v);
        }


        //第三种对于map集合的遍历方式
        //只能获取到值,注意这里不是通过值来找到key
        //Collection<V> values()
        //  返回此地图中包含的值的Collection视图。
        Collection<String> values = map1.values();
        for(String v : values){
            System.out.println(v);
        }
    }
}
